Many of the newest and most modern computer systems are designed using a hierarchical hardware device paradigm. Under this paradigm, controllable hardware devices (devices) have physical input/output connectors that are connected to other devices in a hierarchical fashion. In other words, instead of having all devices directly connected to a processor off a single bus, the hierarchically designed computer system has a nesting of devices off of different speed busses within the computer system to optimize the performance of the overall computer system.
Power resources, such as shared power planes that energize devices within the computer system, are typically connected to the devices within the computer in a non-hierarchical fashion. For example, a single power plane may be connected to the processor while simultaneously being connected to an internal modem, a device which is nested below a bus which is ultimately connected to the same processor. The energy provided by such power resources and consumed by the devices within the computer system should be optimized to reduce the overall consumption of energy. Ideally, all devices in a computer system would have their own power resources which would be individually controlled by the operating system to turn off specific devices and minimize power consumed by the computer system as a whole. In this ideal situation, each device would be allocated a whole power resource that is individually controlled for the device.
Implementing such an ideal configuration is not practical due to the aggregate cost of controllable hardware (e.g., switches to turn on and off individual power planes, etc.) for each individual hardware device, particularly for modern portable computer systems. In other words, power resources can be shared by many devices using switching schemes. In this manner, power resources can be connected to groups of devices across the hierarchy of controllable hardware devices in modern portable computer systems. Determining which of the power resources can be turned off to minimize power consumed by the computer system can be difficult because of the relationships between devices and the power resources. Which device needs which power resources? Are any other devices affected if a particular power resource is turned off? How can the power resources be used effectively and efficiently to power only those devices that need to be energized?
One solution may be to turn off all power resources for a particular device in an effort to conserve power consumed by the computer system. However, other devices may also be connected and may need one of the power resources used by the device. Furthermore, some devices may have the capability to wake the computer system in response to a hardware event. If all power resources are removed from the device, the device may not be able to wake the computer system.
In summary, describing the relationship of the non-hierarchical power resources and the hierarchical controllable hardware devices to the operating system can be problematic when trying to manage which power resources must be on or can be turned off in a given situation. Thus, there is a need for a method for (1) identifying the power dependencies of devices within a computer system, (2) managing the power consumed within the computer system, and (3) enabling a device to wake or revive the computer system from a sleeping or low power consumption state.